↳ ITRS
↳ ITRStoIDPProof
z
sqBase(b, e, r) → halfExp(*@z(b, b), e, r)
condMod(TRUE, b, e, r) → sqBase(b, e, *@z(r, b))
halfExp(b, e, r) → condLoop(>@z(e, 0@z), b, /@z(e, 2@z), r)
condLoop(FALSE, b, e, r) → r
pow(b, e) → condLoop(>@z(e, 0@z), b, e, 1@z)
condLoop(TRUE, b, e, r) → condMod(=@z(%@z(e, 2@z), 1@z), b, e, r)
condMod(FALSE, b, e, r) → sqBase(b, e, r)
sqBase(x0, x1, x2)
condMod(TRUE, x0, x1, x2)
halfExp(x0, x1, x2)
condLoop(FALSE, x0, x1, x2)
pow(x0, x1)
condLoop(TRUE, x0, x1, x2)
condMod(FALSE, x0, x1, x2)
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
z
sqBase(b, e, r) → halfExp(*@z(b, b), e, r)
condMod(TRUE, b, e, r) → sqBase(b, e, *@z(r, b))
halfExp(b, e, r) → condLoop(>@z(e, 0@z), b, /@z(e, 2@z), r)
condLoop(FALSE, b, e, r) → r
pow(b, e) → condLoop(>@z(e, 0@z), b, e, 1@z)
condLoop(TRUE, b, e, r) → condMod(=@z(%@z(e, 2@z), 1@z), b, e, r)
condMod(FALSE, b, e, r) → sqBase(b, e, r)
(0) -> (3), if ((e[0] →* e[3])∧(r[0] →* r[3])∧(*@z(b[0], b[0]) →* b[3]))
(1) -> (0), if ((e[1] →* e[0])∧(*@z(r[1], b[1]) →* r[0])∧(b[1] →* b[0]))
(2) -> (1), if ((r[2] →* r[1])∧(b[2] →* b[1])∧(e[2] →* e[1])∧(=@z(%@z(e[2], 2@z), 1@z) →* TRUE))
(2) -> (5), if ((r[2] →* r[5])∧(b[2] →* b[5])∧(e[2] →* e[5])∧(=@z(%@z(e[2], 2@z), 1@z) →* FALSE))
(3) -> (2), if ((r[3] →* r[2])∧(b[3] →* b[2])∧(/@z(e[3], 2@z) →* e[2])∧(>@z(e[3], 0@z) →* TRUE))
(4) -> (2), if ((b[4] →* b[2])∧(e[4] →* e[2])∧(>@z(e[4], 0@z) →* TRUE))
(5) -> (0), if ((e[5] →* e[0])∧(r[5] →* r[0])∧(b[5] →* b[0]))
sqBase(x0, x1, x2)
condMod(TRUE, x0, x1, x2)
halfExp(x0, x1, x2)
condLoop(FALSE, x0, x1, x2)
pow(x0, x1)
condLoop(TRUE, x0, x1, x2)
condMod(FALSE, x0, x1, x2)
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
↳ IDP
↳ IDependencyGraphProof
z
(0) -> (3), if ((e[0] →* e[3])∧(r[0] →* r[3])∧(*@z(b[0], b[0]) →* b[3]))
(1) -> (0), if ((e[1] →* e[0])∧(*@z(r[1], b[1]) →* r[0])∧(b[1] →* b[0]))
(2) -> (1), if ((r[2] →* r[1])∧(b[2] →* b[1])∧(e[2] →* e[1])∧(=@z(%@z(e[2], 2@z), 1@z) →* TRUE))
(2) -> (5), if ((r[2] →* r[5])∧(b[2] →* b[5])∧(e[2] →* e[5])∧(=@z(%@z(e[2], 2@z), 1@z) →* FALSE))
(3) -> (2), if ((r[3] →* r[2])∧(b[3] →* b[2])∧(/@z(e[3], 2@z) →* e[2])∧(>@z(e[3], 0@z) →* TRUE))
(4) -> (2), if ((b[4] →* b[2])∧(e[4] →* e[2])∧(>@z(e[4], 0@z) →* TRUE))
(5) -> (0), if ((e[5] →* e[0])∧(r[5] →* r[0])∧(b[5] →* b[0]))
sqBase(x0, x1, x2)
condMod(TRUE, x0, x1, x2)
halfExp(x0, x1, x2)
condLoop(FALSE, x0, x1, x2)
pow(x0, x1)
condLoop(TRUE, x0, x1, x2)
condMod(FALSE, x0, x1, x2)
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
↳ IDP
↳ IDependencyGraphProof
↳ IDP
↳ IDPNonInfProof
z
(1) -> (0), if ((e[1] →* e[0])∧(*@z(r[1], b[1]) →* r[0])∧(b[1] →* b[0]))
(2) -> (5), if ((r[2] →* r[5])∧(b[2] →* b[5])∧(e[2] →* e[5])∧(=@z(%@z(e[2], 2@z), 1@z) →* FALSE))
(5) -> (0), if ((e[5] →* e[0])∧(r[5] →* r[0])∧(b[5] →* b[0]))
(3) -> (2), if ((r[3] →* r[2])∧(b[3] →* b[2])∧(/@z(e[3], 2@z) →* e[2])∧(>@z(e[3], 0@z) →* TRUE))
(2) -> (1), if ((r[2] →* r[1])∧(b[2] →* b[1])∧(e[2] →* e[1])∧(=@z(%@z(e[2], 2@z), 1@z) →* TRUE))
(0) -> (3), if ((e[0] →* e[3])∧(r[0] →* r[3])∧(*@z(b[0], b[0]) →* b[3]))
sqBase(x0, x1, x2)
condMod(TRUE, x0, x1, x2)
halfExp(x0, x1, x2)
condLoop(FALSE, x0, x1, x2)
pow(x0, x1)
condLoop(TRUE, x0, x1, x2)
condMod(FALSE, x0, x1, x2)
(1) (r[2]=r[1]∧e[2]=e[1]∧*@z(r[1], b[1])=r[0]∧e[1]=e[0]∧b[1]=b[0]∧b[2]=b[1]∧=@z(%@z(e[2], 2@z), 1@z)=TRUE ⇒ CONDMOD(TRUE, b[1], e[1], r[1])≥NonInfC∧CONDMOD(TRUE, b[1], e[1], r[1])≥SQBASE(b[1], e[1], *@z(r[1], b[1]))∧(UIncreasing(SQBASE(b[1], e[1], *@z(r[1], b[1]))), ≥))
(2) (>=@z(%@z(e[2], 2@z), 1@z)=TRUE∧<=@z(%@z(e[2], 2@z), 1@z)=TRUE ⇒ CONDMOD(TRUE, b[2], e[2], r[2])≥NonInfC∧CONDMOD(TRUE, b[2], e[2], r[2])≥SQBASE(b[2], e[2], *@z(r[2], b[2]))∧(UIncreasing(SQBASE(b[1], e[1], *@z(r[1], b[1]))), ≥))
(3) (-1 + max{2, -2} ≥ 0∧1 + (-1)min{2, -2} ≥ 0 ⇒ (UIncreasing(SQBASE(b[1], e[1], *@z(r[1], b[1]))), ≥)∧0 ≥ 0∧0 ≥ 0)
(4) (-1 + max{2, -2} ≥ 0∧1 + (-1)min{2, -2} ≥ 0 ⇒ (UIncreasing(SQBASE(b[1], e[1], *@z(r[1], b[1]))), ≥)∧0 ≥ 0∧0 ≥ 0)
(5) (3 ≥ 0∧1 ≥ 0∧4 ≥ 0 ⇒ 0 ≥ 0∧(UIncreasing(SQBASE(b[1], e[1], *@z(r[1], b[1]))), ≥)∧0 ≥ 0)
(6) (3 ≥ 0∧1 ≥ 0∧4 ≥ 0 ⇒ 0 = 0∧0 ≥ 0∧0 ≥ 0∧0 = 0∧0 = 0∧(UIncreasing(SQBASE(b[1], e[1], *@z(r[1], b[1]))), ≥)∧0 = 0∧0 = 0∧0 = 0∧0 = 0)
(7) (r[5]=r[0]∧e[2]=e[5]∧r[2]=r[5]∧b[2]=b[5]∧e[5]=e[0]∧=@z(%@z(e[2], 2@z), 1@z)=FALSE∧b[5]=b[0] ⇒ CONDMOD(FALSE, b[5], e[5], r[5])≥NonInfC∧CONDMOD(FALSE, b[5], e[5], r[5])≥SQBASE(b[5], e[5], r[5])∧(UIncreasing(SQBASE(b[5], e[5], r[5])), ≥))
(8) (>@z(%@z(e[2], 2@z), 1@z)=TRUE ⇒ CONDMOD(FALSE, b[2], e[2], r[2])≥NonInfC∧CONDMOD(FALSE, b[2], e[2], r[2])≥SQBASE(b[2], e[2], r[2])∧(UIncreasing(SQBASE(b[5], e[5], r[5])), ≥))
(9) (<@z(%@z(e[2], 2@z), 1@z)=TRUE ⇒ CONDMOD(FALSE, b[2], e[2], r[2])≥NonInfC∧CONDMOD(FALSE, b[2], e[2], r[2])≥SQBASE(b[2], e[2], r[2])∧(UIncreasing(SQBASE(b[5], e[5], r[5])), ≥))
(10) (-2 + max{2, -2} ≥ 0 ⇒ (UIncreasing(SQBASE(b[5], e[5], r[5])), ≥)∧0 ≥ 0∧0 ≥ 0)
(11) ((-1)min{2, -2} ≥ 0 ⇒ (UIncreasing(SQBASE(b[5], e[5], r[5])), ≥)∧0 ≥ 0∧0 ≥ 0)
(12) (-2 + max{2, -2} ≥ 0 ⇒ (UIncreasing(SQBASE(b[5], e[5], r[5])), ≥)∧0 ≥ 0∧0 ≥ 0)
(13) ((-1)min{2, -2} ≥ 0 ⇒ (UIncreasing(SQBASE(b[5], e[5], r[5])), ≥)∧0 ≥ 0∧0 ≥ 0)
(14) (0 ≥ 0∧4 ≥ 0 ⇒ 0 ≥ 0∧0 ≥ 0∧(UIncreasing(SQBASE(b[5], e[5], r[5])), ≥))
(15) (2 ≥ 0∧4 ≥ 0 ⇒ 0 ≥ 0∧(UIncreasing(SQBASE(b[5], e[5], r[5])), ≥)∧0 ≥ 0)
(16) (0 ≥ 0∧4 ≥ 0 ⇒ 0 = 0∧0 = 0∧0 ≥ 0∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧(UIncreasing(SQBASE(b[5], e[5], r[5])), ≥)∧0 ≥ 0)
(17) (2 ≥ 0∧4 ≥ 0 ⇒ 0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 ≥ 0∧0 ≥ 0∧(UIncreasing(SQBASE(b[5], e[5], r[5])), ≥)∧0 = 0∧0 = 0)
(18) (CONDLOOP(TRUE, b[2], e[2], r[2])≥NonInfC∧CONDLOOP(TRUE, b[2], e[2], r[2])≥CONDMOD(=@z(%@z(e[2], 2@z), 1@z), b[2], e[2], r[2])∧(UIncreasing(CONDMOD(=@z(%@z(e[2], 2@z), 1@z), b[2], e[2], r[2])), ≥))
(19) ((UIncreasing(CONDMOD(=@z(%@z(e[2], 2@z), 1@z), b[2], e[2], r[2])), ≥)∧0 ≥ 0∧0 ≥ 0)
(20) ((UIncreasing(CONDMOD(=@z(%@z(e[2], 2@z), 1@z), b[2], e[2], r[2])), ≥)∧0 ≥ 0∧0 ≥ 0)
(21) (0 ≥ 0∧(UIncreasing(CONDMOD(=@z(%@z(e[2], 2@z), 1@z), b[2], e[2], r[2])), ≥)∧0 ≥ 0)
(22) (0 = 0∧0 ≥ 0∧0 = 0∧0 = 0∧(UIncreasing(CONDMOD(=@z(%@z(e[2], 2@z), 1@z), b[2], e[2], r[2])), ≥)∧0 = 0∧0 = 0∧0 ≥ 0∧0 = 0)
(23) (b[3]=b[2]∧e[0]=e[3]∧>@z(e[3], 0@z)=TRUE∧r[0]=r[3]∧r[3]=r[2]∧/@z(e[3], 2@z)=e[2]∧*@z(b[0], b[0])=b[3] ⇒ HALFEXP(b[3], e[3], r[3])≥NonInfC∧HALFEXP(b[3], e[3], r[3])≥CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])∧(UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥))
(24) (>@z(e[3], 0@z)=TRUE ⇒ HALFEXP(*@z(b[0], b[0]), e[3], r[0])≥NonInfC∧HALFEXP(*@z(b[0], b[0]), e[3], r[0])≥CONDLOOP(>@z(e[3], 0@z), *@z(b[0], b[0]), /@z(e[3], 2@z), r[0])∧(UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥))
(25) (-1 + e[3] ≥ 0 ⇒ (UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥)∧-1 + (-1)Bound + e[3] ≥ 0∧e[3] + (-1)max{e[3], (-1)e[3]} ≥ 0)
(26) (-1 + e[3] ≥ 0 ⇒ (UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥)∧-1 + (-1)Bound + e[3] ≥ 0∧e[3] + (-1)max{e[3], (-1)e[3]} ≥ 0)
(27) (-1 + e[3] ≥ 0∧(2)e[3] ≥ 0 ⇒ 0 ≥ 0∧(UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥)∧-1 + (-1)Bound + e[3] ≥ 0)
(28) (-1 + e[3] ≥ 0∧(2)e[3] ≥ 0 ⇒ (UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥)∧0 = 0∧0 = 0∧0 ≥ 0∧-1 + (-1)Bound + e[3] ≥ 0)
(29) (e[3] ≥ 0∧2 + (2)e[3] ≥ 0 ⇒ (UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥)∧0 = 0∧0 = 0∧0 ≥ 0∧(-1)Bound + e[3] ≥ 0)
(30) (e[3] ≥ 0∧2 + (2)e[3] ≥ 0∧b[0] ≥ 0 ⇒ (UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥)∧0 = 0∧0 = 0∧0 ≥ 0∧(-1)Bound + e[3] ≥ 0)
(31) (e[3] ≥ 0∧2 + (2)e[3] ≥ 0∧b[0] ≥ 0 ⇒ (UIncreasing(CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])), ≥)∧0 = 0∧0 = 0∧0 ≥ 0∧(-1)Bound + e[3] ≥ 0)
(32) (e[0]=e[3]∧r[0]=r[3]∧*@z(r[1], b[1])=r[0]∧e[1]=e[0]∧b[1]=b[0]∧*@z(b[0], b[0])=b[3] ⇒ SQBASE(b[0], e[0], r[0])≥NonInfC∧SQBASE(b[0], e[0], r[0])≥HALFEXP(*@z(b[0], b[0]), e[0], r[0])∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
(33) (SQBASE(b[1], e[1], *@z(r[1], b[1]))≥NonInfC∧SQBASE(b[1], e[1], *@z(r[1], b[1]))≥HALFEXP(*@z(b[1], b[1]), e[1], *@z(r[1], b[1]))∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
(34) ((UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥)∧0 ≥ 0∧0 ≥ 0)
(35) ((UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥)∧0 ≥ 0∧0 ≥ 0)
(36) (0 ≥ 0∧0 ≥ 0∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
(37) (0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 ≥ 0∧0 ≥ 0∧0 = 0∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥)∧0 = 0)
(38) (b[1] ≥ 0 ⇒ 0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 ≥ 0∧0 ≥ 0∧0 = 0∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥)∧0 = 0)
(39) (b[1] ≥ 0 ⇒ 0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 ≥ 0∧0 ≥ 0∧0 = 0∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥)∧0 = 0)
(40) (r[5]=r[0]∧e[0]=e[3]∧r[0]=r[3]∧e[5]=e[0]∧*@z(b[0], b[0])=b[3]∧b[5]=b[0] ⇒ SQBASE(b[0], e[0], r[0])≥NonInfC∧SQBASE(b[0], e[0], r[0])≥HALFEXP(*@z(b[0], b[0]), e[0], r[0])∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
(41) (SQBASE(b[5], e[5], r[5])≥NonInfC∧SQBASE(b[5], e[5], r[5])≥HALFEXP(*@z(b[5], b[5]), e[5], r[5])∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
(42) ((UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥)∧0 ≥ 0∧0 ≥ 0)
(43) ((UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥)∧0 ≥ 0∧0 ≥ 0)
(44) (0 ≥ 0∧0 ≥ 0∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
(45) (0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 ≥ 0∧0 = 0∧0 = 0∧0 ≥ 0∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
(46) (b[5] ≥ 0 ⇒ 0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 ≥ 0∧0 = 0∧0 = 0∧0 ≥ 0∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
(47) (b[5] ≥ 0 ⇒ 0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 ≥ 0∧0 = 0∧0 = 0∧0 ≥ 0∧(UIncreasing(HALFEXP(*@z(b[0], b[0]), e[0], r[0])), ≥))
POL(CONDLOOP(x1, x2, x3, x4)) = -1 + x3
POL(SQBASE(x1, x2, x3)) = -1 + x2
POL(0@z) = 0
POL(*@z(x1, x2)) = x1·x2
POL(TRUE) = 2
POL(2@z) = 2
POL(FALSE) = -1
POL(>@z(x1, x2)) = -1
POL(CONDMOD(x1, x2, x3, x4)) = -1 + x3
POL(=@z(x1, x2)) = -1
POL(HALFEXP(x1, x2, x3)) = -1 + x2
POL(1@z) = 1
POL(undefined) = -1
Polynomial Interpretations with Context Sensitive Arithemetic Replacement
POL(TermCSAR-Mode @ Context)
POL(%@z(x1, 2@z)-1 @ {}) = min{x2, (-1)x2}
POL(%@z(x1, 2@z)1 @ {}) = max{x2, (-1)x2}
POL(/@z(x1, 2@z)1 @ {CONDLOOP_4/2}) = -1 + max{x1, (-1)x1}
HALFEXP(b[3], e[3], r[3]) → CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])
HALFEXP(b[3], e[3], r[3]) → CONDLOOP(>@z(e[3], 0@z), b[3], /@z(e[3], 2@z), r[3])
CONDMOD(TRUE, b[1], e[1], r[1]) → SQBASE(b[1], e[1], *@z(r[1], b[1]))
CONDMOD(FALSE, b[5], e[5], r[5]) → SQBASE(b[5], e[5], r[5])
CONDLOOP(TRUE, b[2], e[2], r[2]) → CONDMOD(=@z(%@z(e[2], 2@z), 1@z), b[2], e[2], r[2])
SQBASE(b[0], e[0], r[0]) → HALFEXP(*@z(b[0], b[0]), e[0], r[0])
*@z1 ↔
%@z1 →
/@z1 →
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
↳ IDP
↳ IDependencyGraphProof
↳ IDP
↳ IDPNonInfProof
↳ IDP
↳ IDependencyGraphProof
z
(1) -> (0), if ((e[1] →* e[0])∧(*@z(r[1], b[1]) →* r[0])∧(b[1] →* b[0]))
(2) -> (5), if ((r[2] →* r[5])∧(b[2] →* b[5])∧(e[2] →* e[5])∧(=@z(%@z(e[2], 2@z), 1@z) →* FALSE))
(5) -> (0), if ((e[5] →* e[0])∧(r[5] →* r[0])∧(b[5] →* b[0]))
(2) -> (1), if ((r[2] →* r[1])∧(b[2] →* b[1])∧(e[2] →* e[1])∧(=@z(%@z(e[2], 2@z), 1@z) →* TRUE))
sqBase(x0, x1, x2)
condMod(TRUE, x0, x1, x2)
halfExp(x0, x1, x2)
condLoop(FALSE, x0, x1, x2)
pow(x0, x1)
condLoop(TRUE, x0, x1, x2)
condMod(FALSE, x0, x1, x2)